typedef struct {
BroadwayInputBaseMsg base;
- guint32 mouse_window_id; /* The real window, not taking grabs into account */
+ guint32 window_id;
guint32 state;
gint32 key;
} BroadwayInputKeyMsg;
server->real_mouse_in_toplevel_id = message->pointer.mouse_window_id;
break;
case BROADWAY_EVENT_TOUCH:
+ if (message->touch.touch_type == 0 &&
+ server->focused_window_id != message->touch.event_window_id)
+ {
+ broadway_server_window_raise (server, message->touch.event_window_id);
+ broadway_server_focus_window (server, message->touch.event_window_id);
+ broadway_server_flush (server);
+ }
+
server->last_state = message->touch.state;
break;
case BROADWAY_EVENT_KEY_PRESS:
case BROADWAY_EVENT_KEY_PRESS:
case BROADWAY_EVENT_KEY_RELEASE:
- msg.key.mouse_window_id = ntohl (*p++);
+ msg.key.window_id = server->focused_window_id;
msg.key.key = ntohl (*p++);
msg.key.state = ntohl (*p++);
break;
// browser behaviors or it has no corresponding keyPress
// event, then send it immediately
if (!ignoreKeyEvent(ev))
- sendInput("k", [realWindowWithMouse, keysym, lastState]);
+ sendInput("k", [keysym, lastState]);
suppress = true;
}
// Send the translated keysym
if (keysym > 0)
- sendInput ("k", [realWindowWithMouse, keysym, lastState]);
+ sendInput ("k", [keysym, lastState]);
// Stop keypress events just in case
return cancelEvent(ev);
}
if (keysym > 0)
- sendInput ("K", [realWindowWithMouse, keysym, lastState]);
+ sendInput ("K", [keysym, lastState]);
return cancelEvent(ev);
}
case BROADWAY_EVENT_KEY_PRESS:
case BROADWAY_EVENT_KEY_RELEASE:
window = g_hash_table_lookup (display_broadway->id_ht,
- GINT_TO_POINTER (message->key.mouse_window_id));
+ GINT_TO_POINTER (message->key.window_id));
if (window)
{
event = gdk_event_new (message->base.type == 'k' ? GDK_KEY_PRESS : GDK_KEY_RELEASE);